package com.searchengine.service;

import com.searchengine.entity.KeywordWeight;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 关键词权重服务接口
 */
public interface KeywordWeightService {

    /**
     * 添加关键词权重
     * @param userId 用户ID
     * @param keyword 关键词
     * @param weight 权重值
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 关键词权重对象
     */
    KeywordWeight addKeywordWeight(Long userId, String keyword, BigDecimal weight, Date startTime, Date endTime);

    /**
     * 更新关键词权重
     * @param id 权重ID
     * @param weight 新权重值
     * @param endTime 新结束时间
     * @return 更新后的关键词权重对象
     */
    KeywordWeight updateKeywordWeight(Long id, BigDecimal weight, Date endTime);

    /**
     * 删除关键词权重
     * @param id 权重ID
     */
    void deleteKeywordWeight(Long id);

    /**
     * 根据ID查询关键词权重
     * @param id 权重ID
     * @return 关键词权重对象
     */
    KeywordWeight getKeywordWeightById(Long id);

    /**
     * 获取用户的所有关键词权重
     * @param userId 用户ID
     * @return 关键词权重列表
     */
    List<KeywordWeight> getUserKeywordWeights(Long userId);

    /**
     * 获取用户的某个关键词权重
     * @param userId 用户ID
     * @param keyword 关键词
     * @return 关键词权重列表
     */
    List<KeywordWeight> getUserKeywordWeightByKeyword(Long userId, String keyword);

    /**
     * 获取当前有效的关键词权重
     * @param keyword 关键词
     * @return 关键词权重列表
     */
    List<KeywordWeight> getCurrentKeywordWeights(String keyword);

    /**
     * 计算关键词总权重
     * @param keyword 关键词
     * @return 总权重值
     */
    BigDecimal calculateTotalWeight(String keyword);

    /**
     * 检查关键词权重是否重叠
     * @param userId 用户ID
     * @param keyword 关键词
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param excludeId 排除的ID（用于更新操作）
     * @return 是否重叠
     */
    boolean checkOverlap(Long userId, String keyword, Date startTime, Date endTime, Long excludeId);
}